home *** CD-ROM | disk | FTP | other *** search
- /*
- * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- *
- * The contents of this file constitute Original Code as defined in and
- * are subject to the Apple Public Source License Version 1.1 (the
- * "License"). You may not use this file except in compliance with the
- * License. Please obtain a copy of the License at
- * http://www.apple.com/publicsource and read it before using this file.
- *
- * This Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
- * License for the specific language governing rights and limitations
- * under the License.
- *
- * @APPLE_LICENSE_HEADER_END@
- */
- /*
- * MPEnabler - An example of patching funtions in the Mac OS X Kernel
- *
- * Yes, I know that I said you don't patch functions in kernel,
- * but you should remember what your mother used to say,
- *
- * "Do and I say, not as I do."
- *
- * Josh de Cesare, MacHack 2000
- */
-
- #include <mach/mach_types.h>
- #include <vm/vm_kern.h>
-
-
-
- extern pmap_t kernel_pmap;
-
- typedef int (* PatchProcPtr)();
-
- struct Patch {
- long arg0Save;
- void *oldFunc;
- void *newFunc;
- vm_offset_t targetPhys1;
- vm_offset_t targetPhys2;
- long valid;
- long patchStub[10];
- };
- typedef struct Patch Patch, *PatchPtr;
-
- #define kPatchSize (1 << 6)
- #define kMaxPatches (PAGE_SIZE >> 6)
-
- extern PatchPtr gPatches;
-
- extern void InitPatchIt(void);
- extern void UnInitPatchIt(void);
- extern PatchPtr PatchIt(void *oldFunc, void *newFunc);
- extern void UnPatchIt(PatchPtr patch);
-
- extern void PatchItHelper(void);
- extern void PatchItStub(void);
- extern void PatchItFlush(vm_offset_t addr);
-